package modelo;


import java.util.ArrayList;
import java.util.List;

import org.w3c.dom.Element;

import modelo.CoordenadaGeografica;


public class Ciudad {
	
	private String nombre;
	private String descripcion;
	private CoordenadaGeografica coordenadas;
	private List<Edificio> edificios;
	private List<Ciudad> conexiones;
	
	public Ciudad(Element element){
		this.hidratar(element);
		this.edificios = new ArrayList<Edificio>();
		this.conexiones = new ArrayList<Ciudad>();
	}
	
	protected void hidratar(Element element){
		this.nombre = element.getAttribute("nombre");
		
		this.descripcion = "";
		if(element.hasAttribute("descripcion")){
			this.descripcion = element.getAttribute("descripcion");
		}
		
		String altitud = element.getAttribute("altitud");
		String latitud = element.getAttribute("latitud");
		
		this.coordenadas = new CoordenadaGeografica(Float.parseFloat(altitud), Float.parseFloat(latitud));
	}
	
	
	public Ciudad(String nombre,CoordenadaGeografica coordenadas){
		this.nombre = nombre;
		this.coordenadas = coordenadas;
		this.edificios = new ArrayList<Edificio>();
		this.conexiones = new ArrayList<Ciudad>();
	}
	
	public CoordenadaGeografica getCoordenada(){
		return this.coordenadas;
	}
	
	public String getNombreDeCiudad(){
		return this.nombre;
	}

	public List<Edificio> getEdificios() {
		return edificios;
	}
	
	public int getCantidadEdificiosVisitados()
	{
		int contador = 0;
		for(Edificio edificio : edificios){
			if(edificio.haSidoVisitado()){
				contador ++;
			}
		}
		return contador;
	}
	
	public float calcularDistanciaA(Ciudad ciudad)
	{
		return this.getCoordenada().obtenerDistanciaA(ciudad.getCoordenada());
	}

	public void agregarEdificio(Edificio unEdificio) {
         edificios.add(unEdificio);
	}

	public List<Ciudad> getConexiones() {
		return conexiones;
	}
	
	public void cargarPistas(List<Pista> pistas){
		for(Edificio e : this.edificios){
			e.cargarPistas(pistas);
		}
	}
	
	public void agregarPistaRasgo(Pista pistaRasgo){
		int random = (int) (Math.random() * this.edificios.size());
		this.edificios.get(random).agregarPistaRasgo(pistaRasgo);
	}

	public String getDescripcion() {
		return descripcion;
	}

}
